<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>严格模式 | H5201125</title>
</head>
<body>
    <script>
        // 一、严格模式的声明 
        //1. 全局
        // 'use strict'
        //2. 函数内部
        // function fn(){
        //     'use strict'
        // }

        // 二、严格模式的特性
        'use strict'
        //1) 不允许是用未声明的变量

        // a = 1;
        // console.log(a);
        //2) 函数内部的 this 不指向 window
        // function fn(){
        //     console.log(this);
        // }
        // fn();
        
        //3) eval 作用域   全局作用域  函数作用
        // eval是一个函数，作用是 可以将字符串按照js的语法进行解析
        // eval('alert(1)');
            // eval('var a = 10;console.log(a);');
            // console.log(a);
  
        //4) 对象不能有重复的属性 (重名的属性)   IE 10-11 下有影响, chrome 没影响
        // var obj = {
        //     name:'atguigu',
        //     age:8,
        //     name:'尚硅谷'
        // }  
        // console.log(obj);
        //1. {name:'尚硅谷',age:8}
        //2. {age:8,name:'尚硅谷'}
        //3. {name:'atguigu',age:8}

        // 标准浏览器
        // IE浏览器

        //5) 严格模式下 函数不允许有同名的形参
        // function fn(a,b,b){

        // }
        // fn(1,2,3);

        //6) 新增一些保留字  private(私有的) protected（受保护的） implements（实现）

        // 标识符：用户可以自定义名字的 变量名 函数名 
        //          字母、数字、下划线、$
        //        不能使用关键字（js自己要用的）和保留字（js未来自己可能要用的）
        // var var = 1;
        var protected = 1;
        console.log(protected);

    </script>
</body>
</html>